﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLocalSocket>
#include <QLocalServer>
#include <QQueue>
#include <QTimer>
#include <QMutex>
#include <QThread>
#include <QDateTime>
#include <QLabel>
#include <QSettings>
#include <QDataStream>
#include <QBuffer>
#include "dataprocessor.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void on_startSendButton_clicked();
    void on_pauseSendButton_clicked();
    void on_singleSendButton_clicked();
    void handleNewConnection();
    void updateDisplay(int ad, int pos);  // 更新显示
    void updateCounter(int count);        // 更新计数器
    void sendNextData();
    void saveSettings();
    void loadSettings();
    void handleSocketError(QLocalSocket::LocalSocketError error);

private:
    void initDatabase();
    void processReceivedData(int ad, int pos);
    void handleClientConnection(QLocalSocket *client);
    void startServer();  // 启动服务器
    void queryAndSendData();
    void updateQueryCount(int count);
    void updateSentCount(int count);
    void updateNextData(const AdData &data);  // 添加新方法
    void sendSingleData();
    bool sendData(const AdData &data);
    void cleanupConnection();
    
    Ui::MainWindow *ui;
    DataProcessor *dataProcessor;
    QLocalServer *m_server;
    QLocalSocket *m_client;  // 添加客户端socket连接
    QDataStream *m_dataStream;  // 添加数据流成员
    QTimer *sendTimer;
    QSettings *settings;
    QQueue<AdData> sendQueue;
    QMutex sendMutex;
    int dataCount;        // 数据计数器
    int queryCount;       // 查询到的数据数量
    int sentCount;        // 已发送的数据数量
    bool serverRunning;   // 服务器运行状态
    bool isSending;       // 是否正在发送
    bool isPaused;        // 是否暂停
    static const int MAX_RETRY_COUNT = 3;
    int retryCount;
};
#endif // MAINWINDOW_H
